// #include <iostream>
// #include <cstdio>
// #include <ctime>
// #include <string>
//
// #include "test.h"
//
// void test_print(int a,int b,int c) {
//    printf("%d %d %d\n",a,b,c);
// }
//
// using namespace std;
//
// //自己写的头文件依然保持不变
//
// //代码块
// namespace MM {
//    int age;
//    void print() {
//       printf("MM print\n");
//    }
//
//    struct Data {
//       int age;
//       int num;
//    };
// }
//
// namespace GG {
//    int age;
//    void print();
//    struct info;
// }
//
//
// //在命名空间中声明 在外面实现 一定要加上空间名::
// void GG::print() {
//    printf("GG print\n");
// }
//
// struct GG::info {
//    int age;
//    int num;
// };
//
// namespace Girl {
//    char name[20];
//    void print() {
//       printf("Gir print\n");
//    }
// }
//
// void test_using_namespace() {
//    //有作用域 大括号的位置 一般这条语句都是访问头文件的下面
//    using namespace Girl;
//    print();
// }
//
// namespace A {
//    int A;
//    namespace B {
//       int b;
//       namespace C {
//          int c;
//       }
//    }
// }
//
// int g_num=200;
//
//
// void print_test() {
//    printf("print_test\n");
// }
//
// namespace Test {
//    void print_test() {
//       ::print_test();
//    }
// }
//
// //内联思想 inline关键字
// //牺牲空间提升效率
// //短小精悍
// //在结构体和类中实现函数默认为内联
// inline void print_t() {
//    printf("abc\n");
// }
//
// //2. 函数重载
// //允许同名不同参的函数的存在
// //数目不同 参数类别不同 顺序不同
// void print_one(int a) {
//    printf("%d\n", a);
// }
//
// void print_one(int a,int b) {
//    printf("%s\n", __FUNCTION__);
// }
//
// //既可以传常量 也可以传变量 如果没有const 只可以传变量
// void print_str(const char* str) {
//    printf("%s\n", str);
// }
//
// //3.函数缺省
// //给函数参数默认值，然后调用时候不传参使用默认值
// //缺省的规则 从右往左缺省
// //缺省只需要在.h中做缺省 .cpp实现中不用缺少
// void print_data(int a,int b,int c=3) {
//    printf("%d\n", a);
// }
//
// //正确写法
// void print_data_two(int a=1,int b=2,int c=3) {
//    printf("%d\n", a);
// }
//
//
//
// int main()
// {
//
//    //数据的访问 访问空间的内容 必须要用空间名限定  理解为哪个空间里面的
//    //c++ struct 可以省略 直接用结构体的名字即可
//    MM::Data data = {10,20};
//
//    MM::print();
//    GG::print();
//
//    //学会using namespace语法 //从此行往下都可以省略
//
//    // using namespace Girl;
//    // print();
//    test_using_namespace();
//
//
//    //剥洋葱 嵌套的访问
//    A::B::C::c =1;
//
//    //5 :: 作用域分辨符 另一个作用 当全局作用和局部变量同名的时候 没办法访问全局变量
//    //只有::的方式访问变量或者访问 带边访问全局的
//    int g_num = 33;
//    printf("%d\n", g_num);
//    printf("%d\n",::g_num);
//
//    //6.using替换typedef功能
//    typedef  int  INT;
//    using uint = unsigned int;
//
//    Test::print_test();
//    // 8 std--> 标准命名空间 c++ 所有的空间都包到里面
//    string str;
//
//    print_one(1);
//    print_one(2,3);
//
//
//
//    return 0;
// }